package eu.catengine.primitive;

/**
 * Klasa w której przechowywane są dane dotyczące koloru.<br>
 * Składowe muszą być w przedziale [0..1].
 * 
 * @author mbienkowski
 */
public class Color
{
    /**
     * Składowa barwy z zakresu [0..1]
     */
    public float alpha, red, green, blue;

    /**
     * Konstruktor domyślny. Ustawia wszystkie składowe barwy na 1.0f.
     */
    public Color()
    {
	red = green = blue = alpha = 1.0f;
    }

    /**
     * Konstruktor kopiujący.
     * 
     * @param color
     *            (Color) obiekt do skopiowania.
     */
    public Color(Color color)
    {
	set(color.red, color.green, color.blue, color.alpha);
    }

    /**
     * Konstruktor dla którego należy podać składowe barw RGB. Wartość alpha
     * domyślnie przyjmuje wartość 1.0f. Wartości poszczególnych składowych
     * muszą mieć wartość z zakresu [0..1].
     */
    public Color(float red, float green, float blue)
    {
	set(red, green, blue, 1.0f);
    }

    /**
     * Konstruktor dla którego należy podać składowe barw RGBA. Składowa alpha
     * jest odpowiedzialna za przezroczystość. Wartości poszczególnych
     * składowych muszą mieć wartość z zakresu [0..1].
     */
    public Color(float red, float green, float blue, float alpha)
    {
	set(red, green, blue, alpha);
    }

    /**
     * Przypisuje wartość dla składowych RGB. Składowa alpha domyślnie przyjmuje
     * wartość 1.0f. Wartości poszczególnych składowych muszą mieć wartość z
     * zakresu [0..1].
     */
    public void set(float red, float green, float blue)
    {
	this.red = red;
	this.green = green;
	this.blue = blue;
	this.alpha = 1.0f;
    }

    /**
     * Przypisuje wartość dla składowych RGBA. Wartości poszczególnych
     * składowych muszą mieć wartość z zakresu [0..1].
     */
    public void set(float red, float green, float blue, float alpha)
    {
	this.red = red;
	this.green = green;
	this.blue = blue;
	this.alpha = alpha;
    }

    /**
     * Przypisuje wartość składowej Red w zakresie [0..1]
     */
    public void setRed(float red)
    {
	this.red = red;
    }

    /**
     * Przypisuje wartość składowej Green w zakresie [0..1]
     */
    public void setGreen(float green)
    {
	this.green = green;
    }

    /**
     * Przypisuje wartość składowej Blue w zakresie [0..1]
     */
    public void setBlue(float blue)
    {
	this.blue = blue;
    }

    /**
     * Przypisuje wartość składowej Alpha w zakresie [0..1]
     */
    public void setAlpha(float alpha)
    {
	this.alpha = alpha;
    }

    /**
     * Reprezentuje składowe RGBA w postaci tekstu: ColorRGBA(255, 255, 255,
     * 255).
     */
    @Override
    public String toString()
    {
	return "ColorRGBA(" + ((int) red * 255) + "," + ((int) green * 255) + "," + ((int) blue * 255) + "," + ((int) alpha * 255) + ")";
    }

}
